From 4a0b5ba48169e3955431f7a22a8aeafe06836a0e Mon Sep 17 00:00:00 2001 From: "vh249@arcadians.cl.cam.ac.uk" Date: Fri, 1 Apr 2005 13:36:05 +0000 Subject: [PATCH] bitkeeper revision 1.1236.51.2 (424d4e45s3_LSUrubUDpgLTFNoQ2xw) add support for refreshing vbds Signed-off-by: Vincent Hanquez --- tools/python/xen/xend/XendClient.py | 6 ++++++ tools/python/xen/xend/XendDomain.py | 12 ++++++++++++ tools/python/xen/xend/XendDomainInfo.py | 23 +++++++++++++++++++++++ tools/python/xen/xend/server/SrvDomain.py | 8 ++++++++ tools/python/xen/xend/server/blkif.py | 4 ++++ tools/python/xen/xm/main.py | 22 ++++++++++++++++++++++ 6 files changed, 75 insertions(+) diff --git a/tools/python/xen/xend/XendClient.py b/tools/python/xen/xend/XendClient.py index cdd0fea929..8fbe3fa203 100644 --- a/tools/python/xen/xend/XendClient.py +++ b/tools/python/xen/xend/XendClient.py @@ -308,6 +308,12 @@ class Xend: {'op' : 'device_create', 'config' : fileof(config) }) + def xend_domain_device_refresh(self, id, type, idx): + return self.xendPost(self.domainurl(id), + {'op' : 'device_refresh', + 'type' : type, + 'idx' : idx }) + def xend_domain_device_destroy(self, id, type, idx): return self.xendPost(self.domainurl(id), {'op' : 'device_destroy', diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 9089c75fb6..8842c480cd 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -687,6 +687,18 @@ class XendDomain: self.update_domain(dominfo.id) return val + def domain_device_refresh(self, id, type, idx): + """Refresh a device. + + @param id: domain id + @param idx: device index + @param type: device type + """ + dominfo = self.domain_lookup(id) + self.refresh_schedule() + val = dominfo.device_refresh(type, idx) + self.update_domain(dominfo.id) + return val def domain_device_destroy(self, id, type, idx): """Destroy a device. diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index db2091ce08..e97266b303 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -551,6 +551,16 @@ class XendDomainInfo: dl.append(dev) self.devices[type] = dl + def refresh_device(self, type, dev): + """Refresh a device to a virtual machine. + + @param type: device type + @param dev: device + """ + dl = self.devices.get(type, []) + if dev in dl: + dl.refresh(dev) + def remove_device(self, type, dev): """Remove a device from a virtual machine. @@ -912,6 +922,19 @@ class XendDomainInfo: old_index = self.config.index(old_full_config) self.config[old_index] = new_full_config return new_config + + def device_refresh(self, type, idx): + """Refresh a device. + + @param type: device type + @param idx: device index + """ + dev = self.get_device_by_index(type, idx) + if not dev: + raise VmError('invalid device: %s %s' % (type, idx)) + devs = self.devices.get(type) + dev.refresh() + #self.refresh_device(type, dev) def device_destroy(self, type, idx): """Destroy a device. diff --git a/tools/python/xen/xend/server/SrvDomain.py b/tools/python/xen/xend/server/SrvDomain.py index b99ccb8dfc..aeeb4b0c05 100644 --- a/tools/python/xen/xend/server/SrvDomain.py +++ b/tools/python/xen/xend/server/SrvDomain.py @@ -131,6 +131,14 @@ class SrvDomain(SrvDir): d = fn(req.args, {'dom': self.dom.id}) return d + def op_device_refresh(self, op, req): + fn = FormFn(self.xd.domain_device_refresh, + [['dom', 'str'], + ['type', 'str'], + ['idx', 'str']]) + val = fn(req.args, {'dom': self.dom.id}) + return val + def op_device_destroy(self, op, req): fn = FormFn(self.xd.domain_device_destroy, [['dom', 'str'], diff --git a/tools/python/xen/xend/server/blkif.py b/tools/python/xen/xend/server/blkif.py index 002b529492..2974f070b0 100755 --- a/tools/python/xen/xend/server/blkif.py +++ b/tools/python/xen/xend/server/blkif.py @@ -414,6 +414,10 @@ class BlkDev(controller.SplitDev): val.append(['index', self.index]) return val + def refresh(self): + log.debug("Refreshing vbd domain=%d idx=%s", self.controller.dom, self.idx) + self.interfaceChanged() + def destroy(self, change=0): """Destroy the device. If 'change' is true notify the front-end interface. diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 689d45bd86..43e12e3892 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -800,6 +800,28 @@ Create a virtual block device for a domain. xm.prog(ProgVbdCreate) +class ProgVbdRefresh(Prog): + group = 'vbd' + name = 'vbd-refresh' + info = """Refresh a virtual block device for a domain""" + + def help(self, args): + print args[0], "DOM DEV" + print """ +Refresh a virtual block device for a domain. + + DEV - idx field in the device information +""" + + def main(self, args): + if len(args) != 3: self.err("%s: Invalid argument(s)" % args[0]) + dom = args[1] + dev = args[2] + server.xend_domain_device_refresh(dom, 'vbd', dev) + +xm.prog(ProgVbdRefresh) + + class ProgVbdDestroy(Prog): group = 'vbd' name = 'vbd-destroy' -- 2.30.2